Wt3.2.0文档翻译:Wt::WFileUpload类参考,Wt::WFileUpload Class Reference
const std::vector
< Http::UploadedFile > & uploadedFiles () const 返回已上传的文件。
这個部件用来上传一個文件。
这個部件是显示成一個方框的,其中可以输入文件名,另外还有一個浏览按钮。
取决于JavaScript 是否可用,这個部件的行为會有不同。但是其接口(API)是经过仔细设计的,在不同状态下都可以相同的方式使用。
当JavaScript 可用时,文件只會在调用upload()之后才会上传。这個调用将会启动一個异步的上传(因此會立即返回)。在文件正被上传时,如果连接库提供咯对应的支持,则当数据被接收到时會发射dataReceived()信号(参考WResource::setUploadProgress(),以了解细节)。尽管妳可以伴随着这個信号而修改图形界面,妳还是需要一個适当的机制来更新客户端的界面(使用一個WTimer或使用服务器推技术(server-push))。当文件上传完毕时,會发射uploaded()信号;或者,如果文件过大,则會发射fileTooLarge()信号。妳可以通过setProgressBar()来设置一個进度条,以用来显示上传进度。如果 JavaScript 不可用,则文件會在下次发生鼠标点击事件时上传。那样的话,upload()就没有效果--文件到那时已经上传、对应的那些信号也已经发射。要想测试upload()是否會启动一個上传过程的话,可调用canUpload()。
因此,要正确地使用这個部件的话,需要按照以下规则来做:
•.作好准备,即使在没有调用upload()的情况下,也可能會有uploaded()或fileTooLarge()信号。
•.使用canUpload()来检查一下,upload()是否會启动一個上传过程。如果(!canUpload())成立,则upload()不會有效果。如果(canUpload())成立,则upload()會启动一個新的上传过程,完成之后會发射uploaded()信号,或者會发射fileTooLarge()信号。
当一個文件被接收完毕之后,WFileUpload 部件必须隐藏或者删除。另外最好像下面的例子那样阻止用户将文件上传两次。
上传的文件會被自动放入(spooled)一個本地的临时文件中,那個文件會随着WFileUpload部件一起删除,除非调用咯stealSpooledFile()。
使用示例:
Wt::WFileUpload *upload = new Wt::WFileUpload(this);
upload->setFileTextSize(40);
//提供一個按钮
Wt::WPushButton *uploadButton = new Wt::WPushButton("Send", this);
//当用户单击按钮时上传。
uploadButton->clicked().connect(upload, &Wt::WFileUpload::upload);
uploadButton->clicked().connect(uploadButton, &Wt::WPushButton::disable);
//当用户输入一個文件时自动上传。
upload->changed().connect(upload, &WFileUpload::upload);
upload->changed().connect(uploadButton, &Wt::WPushButton::disable);
//对成功的上传过程作出响应。
upload->uploaded().connect(this, &MyWidget::fileUploaded);
//对上传过程中的问题作出响应。
upload->fileTooLarge().connect(this, &MyWidget::fileTooLarge);
WFileUpload是一個内联(inline )部件。
文件上传部件本身对应于一個<input type="file">标记,但也可以包装到一個<form>标记中。这個部件不提供样式设置,并且利用CSS 进行的样式设置在不同浏览器之间的兼容性较差。
Signal< ::int64_t >& Wt::WFileUpload::fileTooLarge |
( |
) |
当用户尝试上传一個过大的文件时,會发射这個信号。
参数是用户想要上传的文件的(大概)大小。
允许上传的文件的最大尺寸取决于最大请求尺寸,那個东西是在配置文件里配置的(<max-request-size>)。
参考:
WApplication::requestTooLarge()
void Wt::WFileUpload::setProgressBar |
( |
progressBar |
) |
设置一個进度条,以用来指示上传进度。
当文件正在上传时,會使用这里提供的进度条来指示上传进度。进度条的范围和值會在上传开始的时候设置。
如果所提供的进度条已经有一個亲代部件的话,则文件上传部件自身會在开始上传时立即隐藏。如果所提供的进度条还没有亲代部件,则它會成为文件上传部件的一部分,并且在开始上传时替换那個文件选择提示框。
默认的进度条是0(不會指示上传进度)。
参考:
HxLauncher: Launch Android applications by voice commands